#pragma once
#include "glm/glm.hpp"
using namespace glm;

class Camera{
public:
	Camera(vec3 _pos, int _w, int _h, float _fov);
	~Camera();

	void lookAt(vec3 _from, vec3 _at, vec3 _up);

	vec3 position(){ return pos; }
	void position(vec3 _pos){ pos = _pos; }
	//translates the camera's position by the xyz values in the value
	void translate(vec3);

	int scWidth(){ return scW; }
	void scWidth(int);

	int scHeight(){ return scH;	}
	void scHeight(int);

	float h_fov(){ return fov; }
	float v_fov(){ return vertical_fov; }
	
	void FoV(float);

	float aspect(){ return aspct; }
	void aspect(float);

	vec3 up(){ return upVec; }

	vec3 target(){ return targetVec; }


private:
	void updateMatrix();	//update the viewing transform
	
	float heading; //? or should I do this with a vector?

	int scW;
	int scH;

	float fov;			//in degrees
	float vertical_fov;	//in degrees
	float aspct;

	vec3 pos;
	vec3 targetVec;		//where the camera is looking
	vec3 upVec;			//which way is 'up'
};

